page.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. 'use server';
  2. import View from './view';
  3. import { notFound, forbidden, unauthorized } from 'next/navigation';
  4. import { checkAuthServer } from '@/lib/api/auth';
  5. import { fetchBoard, fetchBoardList } from '@/lib/api/forum/board';
  6. import { fetchPostData } from '@/lib/api/forum/post';
  7. import { getTokenData, checkPermission } from '@/lib/utils/server';
  8. import { TokenData } from '@/types/response/common';
  9. import PermissionDenied from '@/app/(main)/(forum)/board/_component/PermissionDenied';
  10. export default async function PostEdit({ params }: { params: Promise<{ id: string }> })
  11. {
  12. const { id } = await params;
  13. if (!/^\d+$/.test(id)) {
  14. return forbidden();
  15. }
  16. let tokenData: TokenData|null;
  17. try {
  18. if (!await checkAuthServer()) {
  19. throw Error;
  20. }
  21. // 회원 정보 조회
  22. tokenData = await getTokenData();
  23. if (!tokenData) {
  24. throw Error;
  25. }
  26. } catch {
  27. return unauthorized();
  28. }
  29. try {
  30. // 게시글 정보 조회
  31. const post = await fetchPostData(Number(id));
  32. if (!post.success || !post.data) {
  33. throw Error;
  34. }
  35. // 게시판 상세 조회
  36. const board = await fetchBoard(post.data.boardCode);
  37. if (!board.success || !board.data) {
  38. throw Error;
  39. }
  40. // 게시글 작성 권한 확인 (본인 글이면 스킵)
  41. if (Number(tokenData.id) !== post.data.memberID) {
  42. if (!await checkPermission(board.data.boardMeta.permission.postWrite, board.data.boardManager)) {
  43. return <PermissionDenied _board={board.data} />;
  44. }
  45. }
  46. // 게시판 목록 조회
  47. const boardList = await fetchBoardList(board.data.boardGroup.code);
  48. if (!boardList.success || !boardList.data) {
  49. throw Error;
  50. }
  51. return (
  52. <View _boardList={boardList.data} _board={board.data} _post={post.data} />
  53. );
  54. } catch {
  55. return notFound();
  56. }
  57. }